package es.gesfutbol.dao;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Hibernate;
import org.hibernate.LockMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.transaction.annotation.Transactional;

import es.gesfutbol.domini.implementacio.Equip;
import es.gesfutbol.domini.implementacio.EquipEnLliga;
import es.gesfutbol.domini.implementacio.EquipEnPenyista;
import es.gesfutbol.domini.implementacio.IdEquipEnPenyista;
import es.gesfutbol.domini.implementacio.Partit;
import es.gesfutbol.domini.implementacio.PartitDeQuiniela;
import es.gesfutbol.domini.implementacio.Penyista;
import es.gesfutbol.util.HibernateDao;
import es.gesfutbol.util.HibernateHelper;

public class EquipEnPenyistaDao extends HibernateDao<EquipEnPenyista, IdEquipEnPenyista> implements IEquipEnPenyistaDao{

	@Override
	@Transactional(readOnly = true)
	public EquipEnPenyista deproxy(EquipEnPenyista equipEnPenyista) {
		
		//Deproxy del Equip.
		Equip equip = equipEnPenyista.getId().getEquip();
		Hibernate.initialize(equip);
		equip = HibernateHelper.deproxy(equip, Equip.class);
		equipEnPenyista.getId().setEquip(equip);		
		
		//Deproxy de penyista.
		Penyista penyista = equipEnPenyista.getId().getPenyista();
		Hibernate.initialize(penyista);
		penyista = HibernateHelper.deproxy(penyista, Penyista.class);
		equipEnPenyista.getId().setPenyista(penyista);
				
		return equipEnPenyista;
	}
	
//	@SuppressWarnings("deprecation")
//	@Transactional(readOnly = true)
//	public Set<EquipEnPenyista> deproxyList(Set<EquipEnPenyista> equips){
//		
//		Iterator<EquipEnPenyista> itEquips = equips.iterator();
//		Set<EquipEnPenyista> equips2 = new HashSet<EquipEnPenyista>();
//		while(itEquips.hasNext()){
//			EquipEnPenyista equip = itEquips.next();
//			this.getSessionFactory().getCurrentSession().lock(equip, LockMode.NONE);
//			Equip e = equip.getId().getEquip();
//			Hibernate.initialize(e);
//			e = HibernateHelper.deproxy(e, Equip.class);
//			equip.getId().setEquip(e);			
//			equips2.add(equip);			
//		}
//		
//		return equips2;				
//	}
	
	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<EquipEnPenyista> findByIdPenyistaDeproxy(Long idPenyista) {
		
		List<EquipEnPenyista> equipEnPenyista =  this.getSessionFactory().getCurrentSession().createCriteria(EquipEnPenyista.class)
			.add(Restrictions.eq("id.penyista.idPenyista", idPenyista)).list();
		
		List<EquipEnPenyista> equipEnPenyistaDeproxy = null;
		
		if(equipEnPenyista!=null && equipEnPenyista.size()>0){
			equipEnPenyistaDeproxy = new ArrayList<EquipEnPenyista>();
			for(EquipEnPenyista j : equipEnPenyista){
				equipEnPenyistaDeproxy.add(deproxy(j));
			}
		}
		return equipEnPenyistaDeproxy;
	}
	


}
